﻿#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//int main()
//{
//	int a = 0;
//	int b = 0;
//	float f1 = 0.0;
//	float f2 = 0.0;
//	scanf("%d %d %f %f", &a, &b, &f1, &f2);
//	printf("%d %d %f %f", a, b, f1, f2);
//	return 0;
//}

//scanf() 处理数值占位符时，会⾃动过滤空⽩字符，包括空格、制表符、换⾏符等。
//所以，⽤⼾输⼊的数据之间，有⼀个或多个空格不影响 scanf() 解读数据。另外，⽤⼾使⽤回⻋
//键，将输⼊分成⼏⾏，也不影响解读。
// scanf() 处理⽤⼾输⼊的原理是，⽤⼾的输⼊先放⼊缓存，等到按下回⻋键后，按照占位符对缓存
//进⾏解读。
//解读⽤户输⼊时，会从上⼀次解读遗留的第⼀个字符开始，直到读完缓存，或者遇到第⼀个不符合条
//件的字符为⽌。
//int main()
//{
//	int x = 0;
//	float y = 0; 
//	// 用户输入"   -13.45e12# 0"    .45e12  是0.45*10的12次方
//	scanf("%d", &x);
//	printf("%d\n", x); // -13
//	scanf("%f", &y); //449999994880.000000   浮点数在内存中有可能无法精确保存
//	printf("%f\n", y); 
//	return 0;
//}
//由于 scanf() 可以连续处理多个占位符，所以上⾯的例⼦也可以写成下⾯这样。
//int main()
//{
//	int x = 0;
//	float y = 0;
//	// 用户输入"   -13.45e12# 0"    .45e12  是0.45*10的12次方
//	int s = scanf("%d %f", &x,&y);  // 输入一个   -13.45e12# 0就可以让x,y同时读取这个数了
//	// 这样x先读取输入的数的这个整数，然后后者读取剩余的小数
//	printf("%d\n%f\n", x,y);  
//	printf("%d", s);  // scanf返回值2 读取了两个变量
//	return 0;
//}

//scanf() 的返回值是⼀个整数，表⽰成功读取的变量个数。
//如果没有读取任何项，或者匹配失败，则返回 0 。如果在成功读取任何数据之前，发⽣了读取错误或
//者遇到读取到⽂件结尾，则返回常量 EOF（-1）。

//int main()
//{
//	int a = 0;
//	int b = 0;
//	int c = 0;
//	int d = 0;
//	int ret = scanf("%d %d %d %d", &a, &b, &c, &d); // 输入10 20 30 ，40  只读取三个 到逗号这就不读取了
//	printf("%d %d %d %d\n", a, b, c, d);
//	printf("%d", ret); // 三
//	return 0;
//}

// 占位符  %c - 字符   %d - 整数  %f - float  %lf - double  %Lf - long double
//上⾯所有占位符之中，除了%c 以外，都会⾃动忽略起⾸的空⽩字符。% c 不忽略空⽩字符，总是返
//回当前第⼀个字符，⽆论该字符是否为空格  可以让%c前面加空格这样就可以跳过空格了
//int main()
//{
//	int num = 0;
//	scanf("%d", &num);
//	printf("%d\n", num);
//
//	return 0;
//}

//int main()
//{
//	char ch = 0;
//	scanf("%c", &ch);  // 输入  []a
//	printf("xxxx%cyyyy\n", ch);// 就会读取前面的空格而不是a  结果xxxx yyyy
//	return 0;
//}

//下⾯要特别说⼀下占位符% s ，它其实不能简单地等同于字符串。它的规则是，从当前第⼀个⾮空⽩
//字符开始读起，直到遇到空⽩字符（即空格、换⾏符、制表符等）为⽌。
//因为%s 不会包含空⽩字符，所以⽆法⽤来读取多个单词，除⾮多个%s ⼀起使⽤。这也意味着，
//scanf() 不适合读取可能包含空格的字符串，⽐如书名或歌曲名。另外， scanf() 遇到%s 占位
//符，会在字符串变量末尾存储⼀个空字符 \0
//int main()
//{
//	char arr[20] = { 0 }; // 数组名是地址，不用取地址
//	scanf("%s", arr);  // 输入hello world
//	printf("%s\n", arr); // 输出hello
//	return 0;
//}


//scanf() 将字符串读⼊字符数组时，不会检测字符串是否超过了数组⻓度。所以，储存字符串时，
//很可能会超过数组的边界，导致预想不到的结果。为了防⽌这种情况，使⽤%s 占位符时，应该指定
//读⼊字符串的最⻓⻓度，即写成%[m]s ，其中的[m] 是⼀个整数，表⽰读取字符串的最⼤⻓度，后
//⾯的字符将被丢弃

// 赋值忽略符
//⽰例中，如果⽤⼾输⼊ 2020 - 01 - 01 ，就会正确解读出年、⽉、⽇。问题是⽤⼾可能输⼊其他
//格式，⽐如 2020 / 01 / 01 ，这种情况下， scanf() 解析数据就会失败。
//为了避免这种情况， scanf() 提供了⼀个赋值忽略符（assignment suppression character） * 。
//只要把 * 加在任何占位符的百分号后⾯，该占位符就不会返回值，解析后将被丢弃。
//int main()
//{
//	int year = 0;
//	int month = 0;
//	int day = 0;
//	scanf("%d-%d-%d", &year, &month, &day);
//	printf("%d %d %d\n", year, month, day);
//	return 0;
//}

// 在创建变量的时候，给变量一个初始值是一个好习惯
// 如果不给变量初始化，有的编译器会报错
// 局部变量不初始化的时候，他的值是随机的
// 全局变量不初始化的时候，默认值是0
//int main()
//{
//	int year = 0;
//	int month = 0;
//	int day = 0;
//	scanf("%d%*c%d%*c%d", &year, &month, &day);
//	printf("%d %d %d\n", year, month, day);
//	return 0;
//}
